﻿/*
 * Определение приоритетов лог-сообщений и интерфейса менеджера логгеров и самих логгеров
 * */
using System;
using System.Collections.Generic;
using System.Text;

namespace ctem.kernel.logger
{
    public enum MessagePriority
    {
        /// <summary>
        /// Отладочные сообщения. Могут использоваться для глубокой отладки.
        /// </summary>
        Debug,
        /// <summary>
        ///    Информационные сообщения. Информируют о серьезных событиях в ходе работы
        /// </summary>
        Info,
        /// <summary>
        ///    Предупреждение. Может использоваться в том случае, если обнаружено некое несоответствие ожидаемому поведению.
        /// </summary>
        Warning,
        /// <summary>
        ///    Сообщение об ошибке. Текущая функция не может быть выполнена правильно, хотя общий процесс не прерывается (восстановимая ошибка).
        /// </summary>
        Error,
        /// <summary>
        ///  Сообщение о невосстановимой ошибке. Детектирована некорректная ситуация, которая может привести к фатальной остановке программы.
        /// </summary>
        Critical,
        /// <summary>
        ///    Сообщение о возникшей исключительной ситуации.
        /// </summary>
        Exception

    }

    public interface ILoggingManagment
    {
        /// <summary>
        /// Возвращает Logger с указанным именем, если Loggerа с таким именем не существует, то
        /// создает и регистрирует его под указанным именем.
        /// </summary>
        /// <param name="LoggerName">Имя автора(компонента) последующих сообщений в лог, отправляемых через возвращённый Logger</param>
        ILogger GetLogger(string LoggerName);
        void FlushToDisk();
        void Destroy();
    }

    public interface ILogger
    {
        void WriteMessage(MessagePriority priority, string message);
        void WriteException(Exception e);
    }
}
